home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
ARASAN_S.ZIP
/
BOOKWRIT.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1993-11-17
|
2KB
|
62 lines
// Copyright 1992 by Jon Dart. All Rights Reserved.
#include "bookwrit.h"
#include "constant.h"
#include <assert.h>
#include <mem.h>
const int Entry_Size = sizeof(Book_Entry);
const int Header_Size = sizeof(unsigned long) + 1;
const int Buffer_Size = 4096;
// Setting this to the book size will keep the whole book in memory,
// which will improve speed.
const char Book_File_Name[] = "book";
static byte *write_buffer;
Book_Writer::Book_Writer( const byte version, const unsigned size )
: book_file( Book_File_Name,
ios::out | ios::trunc | ios::binary ),
my_size(size),
my_version(version),
index(0)
{
is_open = False;
if (!book_file.good())
return;
is_open = True;
book_file.write( (char*)&my_version, 1 );
book_file.write( (char*)&my_size, (int)sizeof(unsigned));
write_buffer = new byte[Buffer_Size];
}
Book_Writer::~Book_Writer()
{
if (index)
book_file.write( write_buffer, index );
book_file.close();
delete [] write_buffer;
}
Boolean Book_Writer::Write( Book_Entry &be )
{
assert(is_open);
if (index + sizeof(be) <= Buffer_Size )
{
memcpy(write_buffer+index,&be,sizeof(be));
index += sizeof(be);
}
else
{
unsigned to_go = Buffer_Size - index;
memcpy(write_buffer+index,&be,to_go);
book_file.write( write_buffer, Buffer_Size );
memcpy(write_buffer,&be + to_go,sizeof(be)-to_go);
index = sizeof(be)-to_go;
}
return True;
}